.TH std::remove_all_extents 3 "2024.06.10" "http://cppreference.com" "C++ Standard Libary"
.SH NAME
std::remove_all_extents \- std::remove_all_extents

.SH Synopsis
   Defined in header <type_traits>
   template< class T >              \fI(since C++11)\fP
   struct remove_all_extents;

   If T is a multidimensional array of some type X, provides the member typedef type
   equal to X, otherwise type is T.

   If the program adds specializations for std::remove_all_extents, the behavior is
   undefined.

.SH Member types

   Name Definition
   type the type of the element of T

.SH Helper types

   template< class T >                                                 \fI(since C++14)\fP
   using remove_all_extents_t = typename remove_all_extents<T>::type;

.SH Possible implementation

   template<class T>
   struct remove_all_extents { typedef T type; };

   template<class T>
   struct remove_all_extents<T[]> {
       typedef typename remove_all_extents<T>::type type;
   };

   template<class T, std::size_t N>
   struct remove_all_extents<T[N]> {
       typedef typename remove_all_extents<T>::type type;
   };

.SH Example


// Run this code

 #include <iostream>
 #include <type_traits>
 #include <typeinfo>

 template<class A>
 void info(const A&)
 {
     typedef typename std::remove_all_extents<A>::type Type;
     std::cout << "underlying type: " << typeid(Type).name() << '\\n';
 }

 int main()
 {
     float a0;
     float a1[1][2][3];
     float a2[1][1][1][1][2];
     float* a3;
     int a4[3][2];
     double a5[2][3];
     struct X { int m; } x0[3][3];

     info(a0);
     info(a1);
     info(a2);
     info(a3);
     info(a4);
     info(a5);
     info(x0);
 }

.SH Possible output:

 underlying type: float
 underlying type: float
 underlying type: float
 underlying type: float*
 underlying type: int
 underlying type: double
 underlying type: main::X

.SH See also

   is_array      checks if a type is an array type
   \fI(C++11)\fP       \fI(class template)\fP
   rank          obtains the number of dimensions of an array type
   \fI(C++11)\fP       \fI(class template)\fP
   extent        obtains the size of an array type along a specified dimension
   \fI(C++11)\fP       \fI(class template)\fP
   remove_extent removes one extent from the given array type
   \fI(C++11)\fP       \fI(class template)\fP
